#include <iostream>
using namespace std;

/*
    成员函数作为类的友元函数：
        区别：
            语法：friend 类名::成员函数名(参数列表);
            1.需要前向引用声明
            2.成员函数的源码需要写在类外，原因：编译器不认识类内的成员

    前向引用声明：告诉编译器有定义这个类    class 类名;
        仅仅告诉编译器有这个类，但是不知道这个类具体有哪些成员
*/
class Alipay;

class Person
{
public:
    Person(string name)
    {
        this->name = name;
    }
    void showAlipay(Alipay &alipay);

private:
    string name;
};

class Alipay
{
public:
    Alipay(string accountnum, string password, double money)
    {
        this->accountnum = accountnum;
        this->password = password;
        this->money = money;
    }
    friend void Person::showAlipay(Alipay &alipay);

private:
    string accountnum;
    string password;
    double money;
};

void Person::showAlipay(Alipay &alipay)
{
    cout << "账号:" << alipay.accountnum << endl;
    cout << "密码:" << alipay.password << endl;
    cout << "余额:" << alipay.money << endl;
}
int main()
{
    Alipay alipay("123456789", "123456", 1000.0);
    Person person("张三");
    person.showAlipay(alipay);

    return 0;
}